Bessere Software durch Querschneidende Module
نویسنده
چکیده
Gute Separierung der Belange in Softwaresystemen ist der Schlüssel, um mit wachsender Komplexität umzugehen. Die wichtigste Aufgabe von Programmiersprachen in Bezug auf dieses Ziel ist die Bereitstellung von geeigneten Mitteln, um das mentale Modell eines Domänenexperten so direkt wie möglich in einer Programmiersprache festhalten zu können und damit die intellektuelle Distanz zwischen dem mentalen Modell und dem Programmcode so gering wie möglich zu halten. Dies ist der Kontext, im dem die hier zusammengefasste Dissertation versucht, den aktuellen Stand der Technik voranzubringen. Ein besonderer Schwerpunkt liegt dabei auf Sprachkonzepten für die Unterstützung sogenannter “querschneidender Modelle”, die aus unterschiedlichen Sichten auf ein Softwaresystem resultieren und mit konventioneller Technologie zu Programmen mit schlechten softwaretechnologischen Eigenschaften wie Wartbarkeit und Wiederverwendbarkeit führen. Die Resultate dieser Arbeit bilden die Grundlage der Programmiersprache Caesar, die zur Zeit in mehreren industriellen Projekten evaluiert wird. Neue Sprachkonstrukte für eine bessere Separierung der Belange (separation of concerns) in der Softwareentwicklung werden benötigt! Diese These ist der Ausgangspunkt der diesem Dokument zugrundeliegenden Dissertation [Os03]. Zunächst einmal: Was ist gemeint mit “guter Separierung der Belange”? Ein Belang (concern) ist jede kohärente Angelegenheit in einer Problemdomäne. Ein Belang kann ein beliebig komplexes Konzept wie “Sicherheit” oder “Lohnbuchhaltung” sein, oder primitive Konzepte wie “warten auf ein Mausereignis”. Separierung der Belange ist eng verwandt mit Kompositionsund Dekompositionsmechanismen in Programmiersprachen, also die Partitionierung eines Softwaresystems in kleine Teile (Dekomposition) und das Zusammenbauen eines Softwaresystems anhand dieser kleinen Teile (Komposition). Diese Definition sagt jedoch nichts darüber, wie ein Softwaresystem dekomponiert werden soll. Zum Beispiel könnte ein Programm in zwei Teile zerlegt werden, bei dem ein Teil die geraden Zeilennummern und ein anderer Teil die ungeraden Zeilennummern enthält. Offensichtlich macht diese Dekomposition jedoch keinen Sinn. Wir benötigen Kriterien, die benutzt werden können, um geeignete Dekompositionen eines Systems zu finden. Dies ist der Punkt, an dem sich das Konzept der Separierung der Belange, welches auf Parnas [Pa72a] und Dijkstra [Di76] zurückgeht, als nützlich erweist. Dieses Konzept postuliert, dass jeder Teil eines dekomponierten Softwaresystems für einen wohldefinierten Aspekt eines Systems verantwortlich sein sollte. Jeder Teil sollte sowenig Wissen wie möglich über andere Teile eines Systems haben, so daß es möglich ist, jeden Aspekt einzeln und isoliert von allen anderen Aspekten zu betrachten. In konventionellen Programmiersprachen wird dieses Konzept durch Module unterstützt, die eine hierarchische Aufteilung der Softwaredomäne ermöglichen und damit eine direkte Abbildung hierarchischer Modelle ermöglichen. Die dieser Arbeit zugrunde liegende These ist, daß neben einer Unterstützung für hierarchische Modelle noch eine zweite Dimension von Modellen durch Programmiersprachen unterstützt werden sollte, nämlich sogenannte querschneidendeModelle, die durch unterschiedliche Sichten desselben Systems zustandekommen. Der Rest dieses Artikels ist wie folgt strukturiert: In Abschnitt 1 wird kurz die Bedeutung guter Separierung der Belange für die Softwareentwicklung erläutert. In Abschnitt 2 wird der Begriff der querschneidenden Modelle eingeführt und dessen Bedeutung für die Softwaretechnologie erläutert. Schliesslich wird Abschnitt 3 einen kleinen Überblick darüber geben, wie querschneidende Modelle in der Programmiersprache Caesar unterstützt werden. 1 Vorteile guter Separierung der Belange Eine gute Separierung der Belange hat eine Reihe wichtiger Vorteile in Bezug auf unterschiedliche Qualitätsaspekte von Software. Der offensichtlichste Vorteile einer guten Separierung der Belange ist, dass es einfacher wird, eine gegebene Software zu verstehen. Wenn jeder Programmteil unabhängig von anderen Teilen begriffen werden kann, muss man nicht die gesamte Struktur eines Softwaresystems kennen, um diesen Teil zu kennen. Wiederverwendbarkeit von Software bedeutet, dass ein Stück Software in vielen unterschiedlichen Stellen benutzt wird. Die Beziehung zur Separierung der Belange ist wie folgt: Je mehr sich ein Stück Software auf einen einzelnen (oder wenige) Belange konzentriert, um so wahrscheinlicher ist es, dass dieses Stück Software in unterschiedlichen Kontexten wiederverwendet werden kann. Ein Stück Software ist umso wiederverwendbarer, je weniger Abhängigkeiten an den Benutzungskontext bestehen, und dies ist genau dann der Fall, wenn sich dieser Teil der Software nur auf einen einzelnen Belang konzentriert. Allgegenwärtige Wiederverwendung führt zur alten Vision der Software, die einfach aus eine Reihe gekaufter Softwarekomponenten zusammgesteckt wird; eine Idee, die sich bis in die 60’er Jahre zurückverfolgen läßt [Mc68]. Der enorme Aufwand, der in kommerzielle Komponentenmodelle wie Enterprise Java Beans (EJB) gesteckt wurde, verdeutlicht die kommerzielle Bedeutung von wiederverwendbarer Software. Ohne eine gute Separierung der Belange ist der Traum von der Lego-artigen Softwarekomponente jedoch zum Scheitern verurteilt. Die Skalierbarkeit eines Softwareprozesses bezieht sich auf eine vernünftige Relation zwischen Kosten und Größe eines Softwaresystems, d.h., die Kosten explodieren nicht in einem großen Projekt. Wenn es möglich ist, Belange einzeln zu behandeln und zu implementieren, kann man Domänenexperten auf einen spezifischen Teil einer Software ansetzen und man benötigt keine allwissenden Entwickler. Die Arbeit kann also in kleine Teile 160 Bessere Software durch Querschneidende Module
منابع مشابه
DES auf FPGAs - Hochgeschwindigkeits-Architekturen für den Data Encryption Standard auf rekonfigurierbarer Hardware
Moderne kryptographische Übertragungsprotokolle bieten eine Reihe von kryptographischen Algorithmen zur Auswahl an, d.h. sie sind Algorithmenunabhängig. Der hierfür erforderliche Wechsel zwischen verschiedenen Algorithmen kann sehr einfach in Software realisiert werden, aber ist schwierig in Hardware zu erreichen. Andererseits zeichnen sich Hardware-Implementationen durch eine wesentlich höhere...
متن کاملErzeugung detaillierter und ausführbarer Geschäftsprozessmodelle durch Modell-zu-Modell-Transformationen
Es wird ein Ansatz vorgestellt, mit dem sich aus grobgranularen fachlichen Geschäftsprozessmodellen detaillierte, ggf. auch technisch verfeinerte, ausführbare Modelle in verschiedenen Zielnotationen erzeugen lassen. Hierzu wird ein der modellgetriebenen Software-Entwicklung vergleichbarer Ansatz gewählt, bei dem Modellelemente geeignet ausgezeichnet und dann mit Hilfe von parametrisierbaren Tem...
متن کاملSystematische Integration von Refactoring und Test im Extreme Programming
Refactoring und Testen bilden wesentliche Bausteine des Extreme Programming. In diesem Beitrag wird der konzeptionelle Zusammenhang zwischen beiden Praktiken herausgearbeitet. Insbesondere wird die Abhängigkeit zwischen der Durchführung eines Refactorings und den sich daraus ergebenden notwendigen Änderungen der Testumgebung betrachtet. Durch eine geeignete Typisierung von Refactorings werden d...
متن کاملVorteile durch eine Verschmelzung von eLearning und Knowledge Management
Informationstechnologie (IT) ist aus vielen Unternehmen nicht mehr wegzudenken. Es drängt sich der Begriff der IT-Landschaft in Unternehmen auf: Insellösungen decken aus unternehmerischer Sicht einzelne, oft separat betrachtete Teilaspekte ab. Durch Knowledge Management, Content Management, Dokumenten Management, Portal, Information Retrieval, Geschäftsprozesse, Projektzusammenarbeit, und eLear...
متن کاملTeamentwicklung in studentischen Projekten
Teamfähigkeit ist eine der Anforderungen an Software-Entwickler, die sehr häufig in Stellenanzeigen genannt wird. Unter Teamfähigkeit wird bei Wikipedia die Fähigkeit verstanden, mit anderen zusammen sozial zu agieren und sich und sein Können im Sinne einer Gruppenaufgabe optimal einzubringen. Studentische Software-Entwicklungsprojekte bieten die Möglichkeit durch Learning-by-doing neben den te...
متن کامل